package com.hotel.controle;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.hibernate.Session;

import com.hotel.dao.CategoriaDAO;
import com.hotel.entidade.Categoria;
import com.hotel.util.HibernateUtil;

@ManagedBean(name = "categoriaBean")
@SessionScoped
public class CategoriaControle {

	private Session session;
	private CategoriaDAO categoriaDAO;
	private Categoria categoria;
	@SuppressWarnings("rawtypes")
	private DataModel listaCategorias;
	private String keyword = "";

	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public CategoriaDAO getCategoriaDAO() {
		return categoriaDAO;
	}

	public void setCategoriaDAO(CategoriaDAO categoriaDAO) {
		this.categoriaDAO = categoriaDAO;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
	
	public String getKeyword() {
		return keyword;
	}

	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}

	@SuppressWarnings("rawtypes")
	public DataModel getListaCategorias() {
		if (this.listaCategorias == null) {
			listarCategorias();
		}
		return listaCategorias;
	}

	public void listarCategorias() {
		session = HibernateUtil.configureSessionFactory().openSession();
		categoriaDAO = new CategoriaDAO(session);
		List<Categoria> lista = categoriaDAO.listaTodos();
		listaCategorias = new ListDataModel<Categoria>(lista);
	}

	public String preparaInserirCategoria() {
		categoria = new Categoria();
		return "/quartos/inserirCategoria";
	}

	public String inserirCategoria() {
		session = HibernateUtil.configureSessionFactory().openSession();
		categoriaDAO = new CategoriaDAO(session);
		try {
			categoriaDAO.insere(categoria);
		} catch (Exception e) {
			e.printStackTrace();
		}
		listarCategorias();
		return "/quartos/buscaCategoria";
	}

	public String preparaAlterarCategoria() {
		categoria = (Categoria) (listaCategorias.getRowData());
		return "/quartos/alterarCategoria";
	}

	public String alterarCategoria() {
		categoriaDAO = new CategoriaDAO(session);
		try {
			categoriaDAO.atualisa(categoria);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "/quartos/buscaCategoria";
	}

	public String excluirCategoria() {
		Categoria categoria = (Categoria) (listaCategorias.getRowData());
		categoriaDAO = new CategoriaDAO(session);
		try{
			categoriaDAO.deleta(categoria);
		} catch(Exception e){
			e.printStackTrace();
		}
		listarCategorias();
		return "/quartos/buscaCategoria";
	}
	
	public String buscarCategoria() {
		session = HibernateUtil.configureSessionFactory().openSession();
		categoriaDAO = new CategoriaDAO(session);
		List<Categoria> lista = categoriaDAO.pesquisarCategoria(this.getKeyword());
		listaCategorias = new ListDataModel<Categoria>(lista);
		this.keyword = null;
		return "/quartos/buscaCategoria";
	}

}
